"""
面向对象，数据分析案例
实现步骤：
1.设计一个类，可以完成数据的封装
2.设计一个抽象类，定义文件读取的相关功能，并使用子类实现具体功能
3.读取文件，生产数据对象
4.进行数据需求逻辑计算（计算每一天的销售额）
5.通过Pyecharts进行图像绘制
"""

from data_define import Record
from file_define import TextFileReader,JsonFileReader
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType

text_file_reader = TextFileReader("2011年1月销售数据.txt")        # 构建文本类对象
json_file_reader = JsonFileReader("2011年2月销售数据JSON.txt")    # 构建json类对象

jan_data:list[Record] = text_file_reader.read_data()     # 读取1月份数据
feb_data:list[Record] = json_file_reader.read_data()     # 读取2月份数据

# 将两个月份的数据合并为个list来存储
all_data:list[Record] = jan_data + feb_data

# 测试数据
# for l in all_data:
#     print(l)

# 开始进行数据计算——计算每一天的销售额
data_dict = {}
for record in all_data:
    if record.date in data_dict.keys():     # 类调用成员变量不可下标
        # 当前日期已经在字典中有记录了，所以和之前的记录做累加即可
        data_dict[record.date] += record.money      # 字典数据的相加
        pass
    else:
        # 当前日期在字典中没有记录
        data_dict[record.date] = record.money       # 字典数据的更新
print(data_dict)
# 可视化图表开发
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))     # 构建图表对象
bar.add_xaxis(list(data_dict.keys()))       # 添加x轴数据
bar.add_yaxis("销售额",list(data_dict.values()),label_opts=LabelOpts(is_show=False))       # 添加y轴数据
bar.set_global_opts(
    title_opts=TitleOpts(title = "每日销售额",pos_left="center",pos_bottom="1%")
)
bar.render("每日销售额柱状图.html")


